package org.example.onlinejudge.controller;

import org.example.onlinejudge.service.UserService;
import org.example.onlinejudge.repository.RoleRepository;
import org.example.onlinejudge.repository.PermissionRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 管理员控制器
 * 负责处理管理员专属页面的请求和响应
 * 实现逻辑：
 * 1. 提供管理员专属主页，展示系统统计数据
 * 2. 统计并显示用户、角色和权限的数量
 * 3. 使用@PreAuthorize注解确保只有管理员（角色代码0）可以访问
 */
@Controller
@RequestMapping("/admin")
@PreAuthorize("hasRole('0')") // 仅管理员可访问
public class AdminController {

    @Autowired
    private UserService userService;

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private PermissionRepository permissionRepository;

    /**
     * 管理员专属主页
     */
    @GetMapping("/index")
    public String adminIndex(Authentication authentication, Model model) {
        // 获取当前登录用户信息
        String username = authentication.getName();
        model.addAttribute("username", username);

        // 统计数据
        long userCount = userService.getUserCount();
        long roleCount = roleRepository.count();
        long permissionCount = permissionRepository.count();

        model.addAttribute("userCount", userCount);
        model.addAttribute("roleCount", roleCount);
        model.addAttribute("permissionCount", permissionCount);

        return "admin/adminIndex";
    }
}


